package com.foruo.learn.designmode.interpret;

import com.foruo.learn.designmode.interpret.symbol.AddExpression;
import com.foruo.learn.designmode.interpret.symbol.SubExpression;

/**
 * 计算
 * @author GaoYuan
 * @date 2018/11/11 下午1:50
 */
public class Calculator {

    /**
     * 计算
     * @author GaoYuan
     * @date 2018/11/11 下午2:01
     */
    public int calculator(String statement){

        Expression left;
        Expression right;
        // 用于存储当前已经计算的值
        Expression now = null;

        // 空格隔开的数据，进行截取成数组
        String[] strs = statement.split(" ");
        for(int i=0;i<strs.length;i++){
            if("+".equals(strs[i])){
                // 左边对象为当前已经计算的值
                left = now;
                // ++i，也就是与后一个数字进行计算，因为当前是运算符
                right = new ValueExpression(Integer.parseInt(strs[++i]));
                // 执行加法
                now = new AddExpression(left, right);
            }else if("-".equals(strs[i])){
                // 左边对象为当前已经计算的值
                left = now;
                // 与右边的数字进行计算即可
                right = new ValueExpression(Integer.parseInt(strs[++i]));
                // 执行减法
                now = new SubExpression(left, right);
            }else{
                // 数字 ，一般来说，第一个和最后一个肯定为数字
                now = new ValueExpression(Integer.parseInt(strs[i]));
            }
        }
        // 解释所有 - now为封装的最终表达式树
        return now.interpret();
    }
}
